//
//  MD5Digest.m
//  weizhuan
//
//  Created by lixun on 13-8-1.
//  Copyright (c) 2013年 lixun. All rights reserved.
//

#import <CommonCrypto/CommonDigest.h>
#import "MD5Digest.h"

@implementation MD5Digest
+(NSString *)md5:(NSString *)str {
//	const char *cStr = [str UTF8String];	
//	unsigned char result[16];
//	CC_MD5( cStr, strlen(cStr), result );
//	return [NSString stringWithFormat:
//			@"%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X",			
//			result[0], result[1], result[2], result[3], 			
//			result[4], result[5], result[6], result[7],			
//			result[8], result[9], result[10], result[11],			
//			result[12], result[13], result[14], result[15]			
//			];
    
//    constchar *cStr = [srcString UTF8String];
//    unsignedchar digest[CC_MD5_DIGEST_LENGTH];
//    // CC_MD5( cStr, strlen(cStr), digest ); 这里的用法明显是错误的，但是不知道为什么依然可以在网络上得以流传。当srcString中包含空字符（\0）时
//    CC_MD5( cStr, self.length, digest );
//    NSMutableString *result = [NSMutableStringstringWithCapacity:CC_MD5_DIGEST_LENGTH * 2];
//    for(int i = 0; i < CC_MD5_DIGEST_LENGTH; i++)
//        [result appendFormat:@"%02x", digest[i]];
//    
//    return result;
    
    const char* cStr = [str UTF8String];
    unsigned char result[CC_MD5_DIGEST_LENGTH];
    CC_MD5(cStr, (CC_LONG)strlen(cStr), result);
    NSMutableString *ret = [NSMutableString stringWithCapacity:CC_MD5_DIGEST_LENGTH];
    for (NSInteger i=0; i<CC_MD5_DIGEST_LENGTH; i++) {
        [ret appendFormat:@"%02x", result[i]];
    }
    
    return ret;

}
@end
